package com.kb.design.mapper.postgreSQL;



import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kb.design.dto.CustomUserDTO;
import com.kb.design.entity.CustomUser;
import com.kb.design.entity.DesignResponsiblePerson;
import com.kb.design.entity.UserSecurity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * (CustomUser)表数据库访问层
 *
 * @author makejava
 * @since 2023-08-22 10:56:59
 */
@Mapper
public interface CustomUserMapper extends BaseMapper<CustomUser> {

    Page<CustomUser> queryPage(Page<CustomUser> page , CustomUserDTO customUser);

    @Select("SELECT u.* FROM design_user u LEFT JOIN design_dept d ON u.dept_id = d.dept_id WHERE d.dept_functions = #{functions} and u.del_flag = '0'")
    List<CustomUser> queryUserByDeptFunctions(String  functions);

    List<CustomUser> selectAll();
    @Select("select * from design_user where code = #{code}")
    CustomUser queryUser(String code);
    @Select("select * from user_security where parent_code = #{code}")
    List<UserSecurity> queryUserSecurity(String code);

    @Select("select * from design_user where code = #{code} and del_flag = '0'" )
    CustomUser queryUserByCode(String code);
    /**
     * 根据职能查询人员
     *
     * @param id 主键
     * @return 是否成功
     */
    //SELECT u.code FROM design_user u LEFT JOIN design_dept d ON u.dept_id = d.dept_id WHERE d.dept_functions = '3' AND u.del_flag = '0'
    @Select("SELECT u.code FROM design_user u LEFT JOIN design_dept d ON u.dept_id = d.dept_id WHERE d.dept_functions = #{code} AND u.del_flag = '0'")
    List<Integer> queryByFunction(String code);

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
//    CustomUser queryById(Long id);
//
    /**
     * 查询封装特定角色人员
     *
     * @param
     * @param
     * @return 对象列表
     */
    @Select({
            "<script>",
            "SELECT u.* FROM design_user u",
            "LEFT JOIN design_user_role ur ON u.id = ur.user_id",
            "LEFT JOIN design_role r ON r.role_id = ur.role_id",
            "WHERE r.role_key LIKE CONCAT('%', #{roleKey}, '%')",
            "<if test='deptId != null and deptId != \"\"'>",
            "AND u.dept_id = #{deptId}",
            "</if>",
            "</script>"
    })
    List<CustomUser> queryUserByRole(@Param("deptId") Long deptId, @Param("roleKey") String roleKey);
//
//    /**
//     * 统计总行数
//     *
//     * @param customUser 查询条件
//     * @return 总行数
//     */
//    long count(CustomUser customUser);
//
//    /**
//     * 新增数据
//     *
//     * @param customUser 实例对象
//     * @return 影响行数
//     */
//    int insert(CustomUser customUser);
//
//    /**
//     * 批量新增数据（MyBatis原生foreach方法）
//     *
//     * @param entities List<CustomUser> 实例对象列表
//     * @return 影响行数
//     */
//    int insertBatch(@Param("entities") List<CustomUser> entities);
//
//    /**
//     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
//     *
//     * @param entities List<CustomUser> 实例对象列表
//     * @return 影响行数
//     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
//     */
//    int insertOrUpdateBatch(@Param("entities") List<CustomUser> entities);
//
//    /**
//     * 修改数据
//     *
//     * @param customUser 实例对象
//     * @return 影响行数
//     */
//    int update(CustomUser customUser);
//
//    /**
//     * 通过主键删除数据
//     *
//     * @param id 主键
//     * @return 影响行数
//     */
//    int deleteById(Long id);

}

